<!doctype html>
<meta charset="utf-8">
<title>CSSUnparsedValue Indexed Getter and Setter</title>
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-cssunparsedvalue-__getter__-index-index">
<link rel="help" href="https://drafts.css-houdini.org/css-typed-om-1/#dom-cssunparsedvalue-__setter__-index-val-val">
<script src="../../../resources/testharness.js"></script>
<script src="../../../resources/testharnessreport.js"></script>
<script src="../resources/testhelper.js"></script>
<body>
<div id="log"></div>
<script>
'use strict';

test(() => {
  const result = new CSSUnparsedValue(['foo', 'bar']);
  assert_equals(result[3], undefined, 'result from out of range index');
  assert_equals(result[-1], undefined, 'result from negative index');
}, 'Getting invalid index in CSSUnparsedValue returns undefined');

test(() => {
  let result = new CSSUnparsedValue([new CSSVariableReferenceValue('--foo')]);
  result[0] = 'A';
  assert_equals(result[0], 'A', 'fragment reflects new value');
}, 'Can update fragment in CSSUnparsedValue to a String');

test(() => {
  let result = new CSSUnparsedValue(['foo']);
  result[0] = new CSSVariableReferenceValue('--A');
  assert_style_value_equals(result[0], new CSSVariableReferenceValue('--A'),
                            'fragment reflects new value');
}, 'Can update fragment in CSSUnparsedValue to a CSSVariableReference');

test(() => {
  let result = new CSSUnparsedValue([]);
  result[0] = 'foo';
  assert_equals(result[0], 'foo', 'new fragment is appended');
}, 'Setting one past the last fragment in a CSSUnparsedValue to a String ' +
   'appends the new fragment');

test(() => {
  let result = new CSSUnparsedValue([' ']);
  result[1] = new CSSVariableReferenceValue('--A');
  assert_style_value_equals(result[1], new CSSVariableReferenceValue('--A'),
                            'new fragment is appended');
}, 'Setting one past the last fragment in a CSSUnparsedValue to a ' +
   'CSSVariableReferenceValue appends the new fragment');

test(() => {
  let result = new CSSUnparsedValue(['foo', 'bar']);
  assert_throws_js(RangeError, () => result[3] = 'foo');
  assert_equals(result[3], undefined, 'fragment does not change');
}, 'Setting out of range index in CSSUnparsedValue throws RangeError');

</script>
